package co.gov.medellin.ssti.sub.model.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import co.gov.medellin.ssti.sub.common.ConexionFactory;
import co.gov.medellin.ssti.sub.common.excepcion.SUBException;
import co.gov.medellin.ssti.sub.model.dao.IBeneficioOtorgadoDAO;

import com.cs.beneficios.business.model.RepBeneficioOtorgadoVO;

public class BeneficioOtorgadoDAOImpl extends BaseDAOImpl implements
		IBeneficioOtorgadoDAO {

	private String SELECT_BOT_BY_CRITERIA = "SELECT COUNT(BENEOTOR.CODIGO) CANTIDAD_OTORGADA, SEDE.CODIGO CODSEDE, "
			+ "SEDE.NOMBRE NOMSEDE, PROG.CODIGO CODPRO, PROG.NOMBRE NOMPRO, "
			+ "SUBPRO.CODIGO CODSUBPRO, SUBPRO.NOMBRE NOMSUBPRO, BENEOTOR.FECHA_BENEFICIO FECHABENEOTORGADO "
			+ "FROM TCS_BEN_PROGRAMA PROG, TCS_BEN_SUBPROGRAMA SUBPRO, "
			+ "TCS_BEN_BENEFICIO_OTORGADO BENEOTOR, TCS_BEN_SEDE SEDE "
			+ "WHERE BENEOTOR.SBPR_CODIGO =  SUBPRO.CODIGO "
			+ "AND BENEOTOR.SEDE_CODIGO = SEDE.CODIGO AND SUBPRO.PRG_CODIGO = PROG.CODIGO "
			+ "AND BENEOTOR.FECHA_BENEFICIO <= SYSDATE AND PROG.VIGENCIA='A' AND SUBPRO.VIGENCIA='A' "
			+ "AND SUBPRO.CODIGO = ? "
			+ "GROUP BY SEDE.CODIGO, SEDE.NOMBRE, PROG.CODIGO, PROG.NOMBRE, BENEOTOR.FECHA_BENEFICIO, "
			+ "SUBPRO.CODIGO, SUBPRO.NOMBRE ORDER BY PROG.NOMBRE,SUBPRO.NOMBRE,SEDE.NOMBRE";

	@Override
	public List loadAllBeneficiosBySubprograma(RepBeneficioOtorgadoVO param) {
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rst = null;

		List beneficios = new ArrayList();

		try {
			con = ConexionFactory.getInstance().getConnection();
			pstmt = con.prepareStatement(SELECT_BOT_BY_CRITERIA);
			pstmt.setLong(1, param.getCodeSubprograma());
			rst = pstmt.executeQuery();
			while (rst.next()) {
				RepBeneficioOtorgadoVO beneficio = new RepBeneficioOtorgadoVO();

				beneficio.setCodeSede(new Long(rst.getLong("CODSEDE")));
				beneficio.setNombreSede(rst.getString("NOMSEDE"));
				beneficio.setCodePrograma(new Long(rst.getLong("CODPRO")));
				beneficio.setNombrePrograma(rst.getString("NOMPRO"));
				beneficio
						.setCodeSubprograma(new Long(rst.getLong("CODSUBPRO")));
				beneficio.setNombreSubprograma(rst.getString("NOMSUBPRO"));
				beneficio.setDesde(param.getDesde());
				beneficio.setHasta(param.getHasta());
				beneficio.setCantidad(rst.getString("CANTIDAD_OTORGADA"));
				beneficio.setFechabeneotorgado(rst.getString("FECHABENEOTORGADO"));
				beneficios.add(beneficio);
			}
		} catch (SQLException e) {
			SUBException
					.logDebugError(
							"Error inesperado obteniendo la lista de todas los beneficios otorgados por subprograma.",
							e);
		} finally {
			close(con, pstmt, rst);
		}
		return beneficios;
	}
	
//	public

}
